package month5.day6;

import java.io.*;
import java.net.Socket;
import java.nio.charset.Charset;
import java.util.Scanner;

public class UploadFileClient {

    // 创建文本扫描器
    private static Scanner input = new Scanner(System.in);
    /**
     *  开始启动客户端
     * @param ipAddr 服务器端IP
     * @param port  服务器监听的端口
     */
    private static void startupApp(String ipAddr,int port) {
         // 声明客户端套接字
        Socket clientSocket = null;
        try {
            // 创建客户端套接字对象
            clientSocket = new Socket(ipAddr,port);
            if(clientSocket.isClosed() == false) {
                System.out.println("客户端已成功与文件存储服务器建立链接 ...");
            }
            do{
                System.out.print("请输入完整的文件路径：");
                String filePath = input.next();
                File file = new File(filePath);
                if(! file.exists()) {
                    System.out.println("您输入的文件路径不存在,请重新输入！");
                }else {
                    int slashIndex = filePath.lastIndexOf("/");
                    String fileName = filePath.substring(slashIndex+1);
                    // 创建数据输出流对象——写入操作
                    DataOutputStream dos = new DataOutputStream(clientSocket.getOutputStream());
                    // 创建数据输入流对象 —— 读取操作
                    DataInputStream dis = new DataInputStream(new FileInputStream(file));
                    // 创建字节数组（用于临时存储数据）
                    byte[] data = new byte[1024];
                    // 每次实际读取字节数量
                    int len = 0;
                    dos.write(fileName.getBytes(Charset.forName("UTF-8")));
                    while ((len = dis.read(data)) > 0) {
                        dos.write(data, 0, len);
                        dos.flush();
                    }
                    // 获取服务器响应数据
                    String response = dis.readUTF();
                    // 在控制台输出打印
                    System.out.println(response);
                }
            }while (true);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 应用程序的入口点
    public static void main(String[] args) {
        // 启动客户端
        startupApp("127.0.0.1",9090);
    }
}
